package client.converter;

import client.FormularioDeRegistroBean;
import facade.DesarrolloHumanoFacade;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import valueObject.TipoDeContratacionVO;

/**
 *
 * @author Juan Sebastian Hernández Serrato
 */
@ManagedBean(name = "tipoDeContratacionVOConverter")
@RequestScoped
@FacesConverter(forClass=TipoDeContratacionVO.class, value="tipoDeContratacionVOConverter")
public class TipoDeContratacionVOConverter implements Converter{

    @EJB
    DesarrolloHumanoFacade desarrolloHumanoFacade;

    @Override
    public TipoDeContratacionVO getAsObject(FacesContext context, UIComponent component, String value) {
        if(value == null || value.length() == 0)
            return null;
        FormularioDeRegistroBean formularioDeRegistroBean = (FormularioDeRegistroBean)context.getApplication().getELResolver().getValue(context.getELContext(), null, "formularioDeRegistroBean");
        TipoDeContratacionVO tipoDeContratacionVO = formularioDeRegistroBean.getDesarrolloHumanoFacade().buscarTipoDeContratacionVO(getKey(value));
        return tipoDeContratacionVO;

    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object object) {
        if(object == null)
            return null;
        if (object instanceof TipoDeContratacionVO) {
            TipoDeContratacionVO tipoDeContratacionVO = (TipoDeContratacionVO) object;
            return getStringKey(tipoDeContratacionVO.getId());
        }else{
            throw new IllegalArgumentException("Este convertidor sólo maneja instancias de TipoDeContratacionVO, esta instancia es de tipo" + object.getClass().getName() );
        }
    }

    private String getStringKey(Integer value){
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append(value);
        return stringBuffer.toString();
    }

    private Integer getKey(String value){
        Integer key = Integer.valueOf(value);
        return key;
    }
}